// //1、字符判断函数
// #include<stdio.h>
// #include<ctype.h>
// int main()
// {
//     char ch1='A';
//     char ch2='c';
//     char ch3='m';
//     char ch4='5';
//     //为真返回大于0的数字，为假就返回0.
//     printf("%d\n",islower(ch1));
//     printf("%d\n",islower(ch2));
//     printf("%d\n",islower(ch3));
//     printf("%d\n",isalpha(ch4));

//     return 0;
// }


// //2、字符转换函数
// #include<stdio.h>
// #include<ctype.h>
// int main()
// {
//     char arr[]="Hello WORD!";
//     // printf("%s\n",tolower(arr));//只能一个一个转
//     int i=0;
//     char ch;
//     while(arr[i])
//     {
//         ch=arr[i];
//         if(islower(ch))//是小写
//         {
//             ch=toupper(ch);//小写转为大写
            
//         }
//         putchar(ch);
//         i++;
//     }

//     return 0;
// }


// //3、strlen()函数的使用
// #include<stdio.h>
// #include<string.h>
// int main()
// {
//     char str[]="Hello Code!";
//     printf("长度为：%d\n",strlen(str));
//     return 0;
// }


// //计数器my_strlen()模拟实现
// #include<stdio.h>
// #include<assert.h>
// int my_strlen(const char* str)
// {
//     assert(str);
//     int count=0;
//     while(*str++)//只要没到达'\0'就循环++
//     {
//         count++;
//     }
//     return count;
// }
// int main()
// {
//     char arr1[]="abcdefghigk";
//     printf("arr1的长度:%d\n",my_strlen(arr1));
//     return 0;
// }


// //2、指针运算实现
// #include<stdio.h>
// #include<assert.h>
// int my_strlen(char* s1)
// {
//     assert(s1);
//     char* p= s1;//先把首地址存起来
//     while(*s1!='\0')
//         s1++;
//     return s1-p;//指针-指针得之间的元素个数。
// }
// int main()
// {
//     char arr2[]="Hello !";
//     printf("arr2长度:%d\n",my_strlen(arr2));
//     return 0;
// }


// //3、函数递归实现
// #include<stdio.h>
// #include<assert.h>
// int my_strlen(const char* ptr)
// {
//     assert(ptr);
//     if(*ptr=='\0')
//         return 0;
//     return 1+my_strlen(ptr+1);//至少有1个字符
// }

// int main()
// {
//     char arr3[]="abcdefgh";
//     printf("arr3长度:%d\n",my_strlen(arr3));
//     return 0;
// }


// //4、strcpy()函数的使用
// #include<stdio.h>
// #include<string.h>
// int main()
// {
//     char str1[]="0";
//     char str2[]="Word!";
//     strcpy(str1,str2);
//     printf("%s\n",str1);
//     return 0;
// }


// //5、自己模拟实现my_strcpy()
// #include<stdio.h>
// #include<assert.h>
// char* my_strcpy(char* s1,const char* s2)
// {
//     assert(s2&&s1);
//     char* ss1=s1;
//     while(*s1++=*s2++)
//     {
//         ;
//     }
//     return ss1;

//     //优化为上面的代码
//     // while(*s2)
//     // {
//     //     *s1=*s2;
//     //     s2++;
//     //     s1++;
//     // }
//     // *s1=*s2;
//     // return ss1;
// }

// int main()
// {
//     char arr1[]="#####";
//     char arr2[]="Hello code!";
//     my_strcpy(arr1,arr2);
//     printf("%s\n",arr1);
//     return 0;
// }


// //6、strcat()函数的使用
// #include<stdio.h>
// #include<string.h>
// int main()
// {
//     char arr1[]="Hello ";
//     char arr2[]="Word!";
//     printf("%s\n",strcat(arr1,arr2));//arr2的内容追加到arr1里面
//     return 0;
// }

// //7、strcat()函数的模拟实现
// #include<stdio.h>
// #include<assert.h>
// char* my_strcat(char* s1,const char* s2)
// {
//     //先断言处理
//     assert(s1&&s2);
//     //先把追加目的地的字符串的首地址存起来
//     char* ss1=s1;
//     //首先找到要追加到的那个字符串的'\0'
//     while(*s1!='\0')//找到'\0'的地址
//     {
//         s1++;//此处++不能放到括号里面，不然找到的就是'\0'后面的地址，到最后打印就只是s1的内容
//     }
//     //然后在后面追加
//     while(*s1++=*s2++);//空语句
//     return ss1; 
// }

// int main()
// {
//     char arr1[]="行以之实，";
//     char arr2[]="持以之久。";
//     printf("%s\n",my_strcat(arr1,arr2));
//     return 0;
// }


// //8、strcmp()函数的使用
// #include<stdio.h>
// #include<string.h>
// int main()
// {
//     char arr1[]="abcdef";
//     char arr2[]="abdcef";
//     printf("%d\n",strcmp(arr1,arr2));//arr1的c 和对应arr2的d 相比，c < d(ASCII码值)

//     char arr3[]="abcdef";
//     char arr4[]="abcdef";
//     printf("%d\n",strcmp(arr3,arr4));

//     char arr5[]="abdcef";
//     char arr6[]="abcdef";
//     printf("%d\n",strcmp(arr5,arr6));
//     return 0;
// }


// //模拟实现my_strcmp()函数
// #include<stdio.h>
// #include<assert.h>
// int my_strcmp(const char* s1,const char* s2)
// {
//     assert(s1&&s2);
//     while(*s1==*s2)//没到'\0'就循环
//     {
//         //判断其中一个为'\0'就说明这两个相同
//         if(*s1=='\0')
//             return 0;
//         s1++;
//         s2++;
//     }
//     if(*s1>*s2)
//         return 1;
//     else
//         return -1;
    
// }

// int main()
// {
//     char arr1[]="abcd";
//     char arr2[]="abce";
//     printf("%d\n",my_strcmp(arr1,arr2));

//     char arr3[]="abcd";
//     char arr4[]="abcd";
//     printf("%d\n",my_strcmp(arr3,arr4));

//     char arr5[]="abce";
//     char arr6[]="abcd";
//     printf("%d\n",my_strcmp(arr5,arr6));
//     return 0;
// }


